
/////////////////////////////////////////////////////////////////////////////////
//
//  define 宏定义 ##
//
/////////////////////////////////////////////////////////////////////////////////

#include<stdio.h>
#include<iostream>
using namespace std;

#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)


#define A(x) T_##x
#define B(a) #a
#define C(x) #x


#define WARN_IF(EXP) if(EXP) cerr << #EXP << endl;
#define paster( n ) cout << "token" << #n << " = " << n << endl;

int main()
{
    std::cout << f(1, 2)<< std::endl;
    std::cout << h(f(1, 2))<< std::endl;
    std::cout << g(f(1, 2))<< std::endl;
    std::cout << h(A(1))<< std::endl;
    std::cout << B(1)<< std::endl;
    std::cout << C(1)<< std::endl;

    int div = 0;
    WARN_IF(div == 0);              //输出: div == 0
    paster(9);                      //输出: token9 = 9

    return 0;
}
